const gulp = require('gulp');
const path = require('path');
const pump = require('pump');
const less = require('gulp-less');
const watchLess = require('gulp-watch-less');
const modify = require('gulp-modify');
const concat = require('gulp-concat');
const webpack = require('webpack');
const gutil = require('gulp-util');
const csscomb = require('gulp-csscomb');
const webpackConfig = require('./webpack.config.js');
const jsonConf = require('./config/config.json');
const conf = require('./config/config.js');
const cleanCSS = require('gulp-clean-css');

/**
 * ================================================================================================================
 *   Start 参数配置 前端资源  
 * ================================================================================================================
 */
const create = {
    linkFile: (file, content) => {
        var fullPath = file.history[0],
            cwd = file.cwd,
            link = fullPath.replace(cwd, '').replace(/\\/g, '/');
        return link ? `<link type="text/css" rel="stylesheet" href="..${link}">` : ` `;
    },
    scriptFile: (file, content) => {
        var fullPath = file.history[0],
            cwd = file.cwd,
            link = fullPath.replace(cwd, '').replace(/\\/g, '/');
        return link ? `<script type="text/javascript" src="..${link}"></script>` :` `;
    }
}

/**
 * ================================================================================================================
 *   Start build less前端资源  
 * ================================================================================================================
 */
gulp.task('less', (cb) => {
    pump([
        gulp.src(jsonConf.less),
        less(),
        gulp.dest('./style/stylesheets')
    ], cb);
});

gulp.task('cssmin:index', ['less'], (cb) => {
    pump([
        gulp.src(jsonConf.cssindex),
        modify({
            fileModifier: conf.clearCSSCharset
        }),
        csscomb(),
        cleanCSS(),
        concat({path:'index.css', cwd:''}),
        gulp.dest('./public/style/stylesheets')
    ], cb);
});

gulp.task('cssmin:cycle', ['less'], (cb) => {
    pump([
        gulp.src(jsonConf.cycleindex),
        modify({
            fileModifier: conf.clearCSSCharset
        }),
        csscomb(),
        cleanCSS(),
        concat({path:'recycle.css', cwd:''}),
        gulp.dest('./public/style/stylesheets')
    ], cb);
})

gulp.task('cssmin', ['cssmin:index', 'cssmin:cycle'])

/**
 * ================================================================================================================
 *   Start copy前端资源  
 * ================================================================================================================
 */
gulp.task('copy:css',['less'], (cb) => {
    pump([
        gulp.src(jsonConf.css),
        gulp.dest('./public/stylesheets')
    ], cb);
});

gulp.task('copy:svgCss', (cb) => {
    pump([
        gulp.src(jsonConf.svgCss),
        gulp.dest('./public/svg')
    ], cb);
});

gulp.task('copy:images', (cb) => {
    pump([
        gulp.src(jsonConf.images),
        gulp.dest('./public/style/images')
    ], cb);
});

gulp.task('copy:js', (cb) => {
    pump([
        gulp.src(jsonConf.jsVendor),
        gulp.dest('./public/script')
    ], cb);
});

gulp.task('copy:font', (cb) => {
    pump([
        gulp.src(jsonConf.font),
        gulp.dest('./public/style/font')
    ], cb);
});

gulp.task('copy', ['copy:images', 'copy:js', 'copy:svgCss', 'copy:font']);

/**
 * ================================================================================================================
 *   使用webpack处理js 
 * ================================================================================================================
 */
var myDevConfig = Object.create(webpackConfig);

var devCompiler = webpack(myDevConfig);

gulp.task("script", function(callback) {
    devCompiler.run(function(err, stats) {
        if(err) throw new gutil.PluginError("webpack:script", err);
        gutil.log("[webpack:script]", stats.toString({
            colors: true
        }));
        callback();
    });
});
/**
 * ================================================================================================================
 *   热编译
 * ================================================================================================================
 */
gulp.task('watch', (cb) => {
    gulp.watch([
        './src/*.js',
        './src/**/*.js'
    ], ['script']),
    gulp.watch([
        './style/*.less',
        './style/**/*.less'
    ], ['cssmin'])
});
/**
 * ================================================================================================================
 *   开发环境layout
 * ================================================================================================================
 */
gulp.task('layout:head', cb => {
    pump([
        gulp.src(jsonConf.css.concat(jsonConf.svgCss)),
        modify({
            fileModifier: create.linkFile
        }),
        concat('head-dev.html'),
        gulp.dest('./view/layout')
    ], cb);
});

gulp.task('layout:foot', cb => {
    pump([
        gulp.src(jsonConf.js),
        modify({
            fileModifier: create.scriptFile
        }),
        concat('foot-dev.html'),
        gulp.dest('./view/layout')
    ], cb);
});

gulp.task('layout', ['layout:head', 'layout:foot']);

gulp.task('build',[ 'copy', 'watch', 'cssmin', 'script']);

gulp.task('default',['copy', 'cssmin', 'script'])



